Three Haskell Cakeの実践としてpurescript-halogen-realworldを読む
Three Haskell Cakeの実践としてpurescript-halogen-realworldを読む
この記事と合わせてLog部分の実装を見ていく
Layer3
主にsrc/Data/の中にあるファイル群
Layer2
主にsrc/Capability/の中にあるファイル群
Layer1
雑に言えばAppM.purs全体がLayer1に相当する
Store.pursと、AppM.pursのAppMの定義部分
恐らく実装順序としては、
本当に純粋なロジックについてはLayer3から書ける
ただ、Effectが入ってきそうな処理に関しては、
まずLayer2でinterfaceを定義し、
そのApplication Monadを使ってLayer3で純粋なロジックを書き、
最後にLayer1で具体的に外部サービスと接続する
という流れになると思う
Layer3: Logの型を定義する
code:Data/Log.purs(hs)
data LogReason = Debug | Info | Warn | Error
domain logicとして取り敢えず型を用意しておく
残りのロジックは
Layer2: Logの出力先に依存しないInterfaceを用意する
抽象度が高く、Effectの取り扱いの方針を決める実装になる
具体的に、LogMessages.pursの場合を見る
Logの実装は、「〇〇にLogを出力する」という抽象的なinterfaceをまず考える
出力先は、consoleだったり外部サービスだったりするし、テスト目的でfileに出すこともある
外部リソースとLayer2を接続する